from sqlalchemy.orm import Session

from app import crud, schemas
from app.core.config import settings
from app.models.user import Role  # noqa: F401

from app.db.session import engine
from app.db import base

# 确保在初始化数据库之前导入所有SQLAlchemy模型（app.db.base），否则，SQLAlchemy可能会无法正确地初始化关系


def init_db(db: Session) -> None:
    '''
    使用 base.Base.metadata.create_all 创建数据库表（如果尚未创建）
    如果用户对象不存在，则使用 crud.user.create 创建一个新用户对象，该对象具有给定的电子邮件地址和密码。同时，将用户的角色设置为 Role.ADMIN
    '''
    base.Base.metadata.create_all(bind=engine)

    user = crud.user.get_by_email(db, email=settings.FIRST_SUPERUSER)
    if user is None:
        user_in = schemas.UserCreate(
            email=settings.FIRST_SUPERUSER,
            password=settings.FIRST_SUPERUSER_PASSWORD,
        )
        user = crud.user.create(db, obj_in=user_in, role=Role.ADMIN)  # noqa: F841
